package com.aiobc.business.dataext.service.impl;

import com.aiobc.business.dataext.domain.DataInfoExt;
import com.aiobc.business.dataext.mapper.DataInfoExtMapper;
import com.aiobc.business.dataext.service.IDataInfoExtService;
import com.aiobc.common.core.constant.CacheConstants;
import com.aiobc.common.core.exception.ServiceException;
import com.aiobc.common.redis.service.RedisService;
import org.bouncycastle.math.ec.custom.sec.SecT113Field;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.concurrent.TimeUnit;


/**
 * 数据文件信息（热更新数据）Service业务层处理
 * 
 * @author ruoyi
 * @date 2021-10-21
 */
@Service
public class DataInfoExtServiceImpl implements IDataInfoExtService
{
    @Resource
    private DataInfoExtMapper dataInfoExtMapper;
    @Resource
    private RedisService redisService;


    /**
     * 查询数据文件信息（热更新数据）
     * 
     * @param dataId 数据文件信息（热更新数据）主键
     * @return 数据文件信息（热更新数据）
     */
    @Override
    public DataInfoExt selectDataInfoExtByDataId(String dataId)
    {
        return dataInfoExtMapper.selectDataInfoExtByDataId(dataId);
    }

    /**
     * 修改数据文件信息（热更新数据）
     * 
     * @param dataInfoExt 数据文件信息（热更新数据）
     * @return 结果
     */
    @Override
    public int updateDataInfoExt(DataInfoExt dataInfoExt)
    {
        return dataInfoExtMapper.updateDataInfoExt(dataInfoExt);
    }


    /**
     * 增加浏览量
     * @param dataId
     */
    @Override
    public void addView(String dataId) {
        setDataInfoExtRedis(dataId,CacheConstants.VIEW_NUM);
    }

    /**
     * 增加下载量
     * @param dataId
     */
    @Override
    public void addDownload(String dataId) {
        setDataInfoExtRedis(dataId,CacheConstants.DOWNLOAD_NUM);
    }

    /**
     * 增加调用量
     * @param dataId
     */
    @Override
    public void addCall(String dataId) {
        setDataInfoExtRedis(dataId,CacheConstants.CALL_NUM);
    }

    /**
     * 更新数据量
     * @param dataId
     * @param dataNum
     */
    @Override
    public int updateDataNum(String dataId, Long dataNum) {
        DataInfoExt dataInfoExt = new DataInfoExt();
        dataInfoExt.setDataId(dataId);
        dataInfoExt.setDataNum(dataNum);
        return dataInfoExtMapper.updateDataInfoExt(dataInfoExt);
    }


    /**
     * 设置缓存
     * @param dataId
     * @return
     */
    public void setDataInfoExtRedis(String dataId,String level){
        if (!redisService.hasKey(CacheConstants.DATA_INFO_EXT_UPDATE+":"+dataId+":"+level)){
            redisService.setCacheObject(CacheConstants.DATA_INFO_EXT_UPDATE+":"+dataId+":"+level,0,80L,TimeUnit.MILLISECONDS);
        }
        setDataInfoExtRedis(dataId,level);
        redisService.incr(CacheConstants.DATA_INFO_EXT_UPDATE+":"+dataId+":"+level);
    }
}
